/*	global AJAX setup */

$.ajaxSetup({
	cache:false,
	error: function(jqXHR) {
		foriaShowModalError(jqXHR.responseText);
		foriaStatusBarMessage(' ... ');
	}
});

var foriaSelectedTab = null;

$(function(){

    // Build new foriaBoxes
	$('#foriaBoxes').tabs({
		show: function(event, ui) {
			//console.log(ui);
			if (alreadyLoadedForiaTabs[ui.panel.id] == false) {
				$(ui.panel).load(urlForiaTabs[ui.panel.id]);
				alreadyLoadedForiaTabs[ui.panel.id]=true;
				event.preventDefault();
			} else {
				if (ui.panel.id == 'foriaTabPages')
					foriaAutoPageResize();
				if (ui.panel.id == 'foriaTabTemplates')
					foriaAutoTemplatesResize();
			}
			foriaSelectedTab = ui.panel.id;
		},
		ajaxOptions: {
			cache : false,
			async : false,
			error: function( xhr, status, index, anchor ) {
				$( anchor.hash ).html(
					'<div class="ui-state-error ui-corner-all" style="padding: 0 .7em;">' +
					'<p><span class="ui-icon ui-icon-alert" style="float: left; margin-right: .3em;"></span>' +
					'Не могу прочитать данные для данной области. ' +
					'Попробуйте снова или обратитесь к разрабочику.</p></div>');
			},
		},
	})
	.bind( "tabsselect", function(event, ui) {
		if (foriaSelectedTab == 'foriaTabPages' && typeof(foriaJSPages)!='undefined' &&  foriaJSPages.id > 0 && foriaJSPages.is_changed == true) {
			foriaShowNotSaved(function(){
				foriaJSPages.is_changed = false;
				foriaSelectedTab =  ui.panel.id;
				$('#foriaBoxes').tabs( "select" , ui.index );
			});
			return false;
		}
		if (foriaSelectedTab == 'foriaTabTemplates' && typeof(foriaJSTemplates)!='undefined' &&  foriaJSPages.id > 0 && foriaJSTemplates.is_changed == true) {
			foriaShowNotSaved(function(){
				foriaJSTemplates.is_changed = false;
				foriaSelectedTab =  ui.panel.id;
				$('#foriaBoxes').tabs( "select" , ui.index );
			});
			return false;
		}

  	});

});

/* служебные функции для вывода сообщений */

/* вывод данных в статус бар */
function foriaStatusBarMessage(mesg)
{
	$('#foriaStatusBar').html(mesg);
}

/* вывод ошибок в модальное окно */
function foriaShowModalError(errStr, callback)
{
	errStr = errStr.replace(/<style.*style>/igm, "");
	var start = errStr.search(/<style/i);
	var stop = errStr.search(/<\/style>/i);
	if (stop>0) {
		errStr = errStr.substr(0, start) + errStr.substr(stop+8);
	}
	console.log ($("*:focus"));
	$('#foriaPagesErrorDialog').html(errStr);
	$('#foriaPagesErrorDialog').dialog({
		//autoOpen: false,
		modal: true,
		resizable: false,
		dialogClass: 'alert',
		width: 500,
		buttons: {
			"Закрыть": function() {
				$( this ).dialog( "close" );
				callback();
			}
		}
	});
}


/* если данные не сохранены - предупредим пользователя */
function foriaShowNotSaved(callback) {
	$('#foriaDataNotSaved').dialog({
		//autoOpen: false,
		modal: true,
		resizable: false,
		dialogClass: 'alert',
		//position: [ e.pageX, e.pageY ],
		width:380,
		buttons: {
			"Вернутся к редактированию": function() {
				$( this ).dialog( "close" );
			},
			"Я знаю что я делаю ...": function() {
				$( this ).dialog( "close" );
				callback();
			}
		}
	});
}


/* добавляем синтаксис для смарти */
CodeMirror.defineMode("smarty", function(config, parserConfig) {
  var smartyOverlay = {
    token: function(stream, state) {
      var ch = stream.next();

      if (ch == '{') {

        if (stream.peek() == '$') {
          // Variable
          stream.skipTo('}');
          stream.next();
          return 'smarty_var';
        } else if (stream.peek() == '*') {
          // Comment
          stream.skipTo('}');
          stream.next();

          return 'smarty_comment';
        } else {
          // Logic
          stream.skipTo('}');
          stream.next();

          return 'smarty';
        }
      }
    }
  };
  return CodeMirror.overlayParser(CodeMirror.getMode(config, parserConfig.backdrop || "text/html"), smartyOverlay);
});

function goodbye(e) {
	if ((typeof(foriaJSPages)!='undefined' && foriaJSPages.id > 0 && foriaJSPages.is_changed == true) ||
		(typeof(foriaJSTemplates)!='undefined' && foriaJSTemplates.id > 0 && foriaJSTemplates.is_changed == true)) {
		var leave_message = 'Внимание! Данные в одной из вкладок были изменены. Вы действительно хотите покинуть приложение?'
		if(!e) e = window.event;
		//e.cancelBubble is supported by IE - this will kill the bubbling process.
		e.cancelBubble = true;
		e.returnValue = leave_message;
		//e.stopPropagation works in Firefox.
		if (e.stopPropagation)
		{
		    e.stopPropagation();
		    e.preventDefault();
		}

		//return works for Chrome and Safari
		return leave_message;
	}
 }

window.onbeforeunload=goodbye;